package modelo;

import java.io.Serializable;
import java.util.Calendar;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import enumeracao.NotaEnum;
import enumeracao.StatusContrato;

@Entity
@Table(name="contrato")
public class Contrato implements Serializable {
    
    @Id
    @GeneratedValue
    private Long id;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Calendar dataInicio;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable=true)
    private Calendar dataFim;
    
  
    @OneToOne(cascade= {CascadeType.ALL})
    private Avaliacao avaliacao;
     
    
     @OneToOne
     private Freelancer freelancer;
     
     @OneToOne
     private Projeto projeto;
     
     @OneToOne
     private DonoProjeto donoProjeto;

     @OneToOne
     private Lance lance;
     
     private double valor;
     
     @Enumerated(EnumType.STRING)
     private StatusContrato status;
     
     @Enumerated(EnumType.ORDINAL)
     private NotaEnum nota;
     
     private String comentario;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Calendar getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Calendar dataInicio) {
        this.dataInicio = dataInicio;
    }

    public Calendar getDataFim() {
        return dataFim;
    }

    public void setDataFim(Calendar dataFim) {
        this.dataFim = dataFim;
    }

    public Freelancer getFreelancer() {
        return freelancer;
    }

    public void setFreelancer(Freelancer freelancer) {
        this.freelancer = freelancer;
    }

    public Projeto getProjeto() {
        return projeto;
    }

    public void setProjeto(Projeto projeto) {
        this.projeto = projeto;
    }

    public DonoProjeto getDonoProjeto() {
        return donoProjeto;
    }

    public void setDonoProjeto(DonoProjeto donoProjeto) {
        this.donoProjeto = donoProjeto;
    }
    
    

    public double getValor() {
		return valor;
	}

	public void setValor(double valor) {
		this.valor = valor;
	}
	
	

	public StatusContrato getStatus() {
		return status;
	}

	public void setStatus(StatusContrato status) {
		this.status = status;
	}

	@Override
    public int hashCode() {
        int hash = 5;
        hash = 89 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Contrato other = (Contrato) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

	public NotaEnum getNota() {
		return nota;
	}

	public void setNota(NotaEnum nota) {
		this.nota = nota;
	}

	public String getComentario() {
		return comentario;
	}

	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
        
        public boolean  getAberto() {
            return (this.status == StatusContrato.ABERTO);
        }

    public Lance getLance() {
        return lance;
    }       

    public void setLance(Lance lance) {
        this.lance = lance;
    }

	public Avaliacao getAvaliacao() {
		return avaliacao;
	}

	public void setAvaliacao(Avaliacao avaliacao) {
		this.avaliacao = avaliacao;
	}
    
    
          
}
